(function () {
if ((typeof jQuery191 === 'undefined')) {
if (window.jQuery) {
jQuery191 = window.jQuery;
} else if (window.Checkout && window.Checkout.$) {
jQuery191 = window.Checkout.$;
}
}
})();
function getHost() {
const scripts = document.getElementsByTagName('script');
let scriptUrl = '';
for (let i = 0; i < scripts.length; i++) {
if (scripts[i].src.includes('shopify/dataClient.js')) {
scriptUrl = scripts[i].src;
break;
}
}
return new URL(scriptUrl).origin;
}
function searchOrder() {
$ = jQuery191;
var order = new Object();
var name = $("#orderNumber").val();
var total = $("#total").val();
order.ShopName = Shopify.shop;
order.OrderId = name;
order.OrdenName = total;
var host = getHost();
$("#status").show();
$.ajax({
url: host + '/Shopify/Clients/SearchOrder',
type: 'GET',
async: false,
dataType: 'jsonp',
data: { info: btoa(JSON.stringify(order)) },
success: function (result) {
$("#status").hide();
if (result.success == true)
getBilling(result.shop, result.orderId);
else
alert("No se encontró la orden de compra a facturar, revisa que los datos sean los correctos.");
},
error: function () {
alert("Ocurrio un error al procesar la peticion.");
$("#status").hide();
},
});
}
function getBilling(shop, id) {
$ = jQuery191;
var host = getHost();
$("#status").show();
$.ajax({
url: host + '/Shopify/Clients/getBillingPartial',
type: 'GET',
async: false,
dataType: 'jsonp',
data: { shop: shop, orderId: id},
success: function (result) {
var html = result.partial;
html += 'La version del CFDI es ' + result.version + ' , los datos de Régimen Fiscal y CP es para actualizar el catalogo de clientes.';
$("#containerFacturama").empty().append(html);//result.partial);
if ($("#Rfc").val() != undefined && $("#Rfc").val() != "")
$("#Rfc").trigger('onkeyup');
$("#status").hide();
},
error: function () {
alert("Ocurrio un error al procesar la peticion.");
$("#status").hide();
},
});
}
function saveClient(isStore) {
$ = jQuery191;
var error = ValidateClient();
if (error == "") {
var client = btoa(JSON.stringify(getDataClient()));
var checkout = btoa(JSON.stringify(getCheckOutElements(isStore)));
if (client != null && checkout != null) {
submitClient(client, checkout, isStore);
} else
$("#errors").empty().append("Ocurrio un error al obtener la informacion.");
} else {
$("#errors").empty().append(error);
}
}
function submitClient(client, checkout, isStore) {
$ = jQuery191;
var host = getHost();
$("#status").show();
$.ajax({
url: host + '/Shopify/Clients/SaveClient',
type: 'GET',
async: false,
dataType: 'jsonp',
data: { dataClient: client, checkout: checkout },
success: function (result) {
$("#errors").empty();
if (result.onlyData == true) {
alert("Se guardo correctamente la información, pongase en contacto con el encargado de la Tienda.");
$("#status").hide();
} else if (result.success == true && result.shopInvoiceId > 0 && result.created == false && result.createdByLimit != false) {
if (result.orderStatus) {
alert("Se guardo correctamente la información, espera un momento en lo que se genera la Factura.");
if (result.version == null || result.version == undefined || result.version == "") {
alert("Versión no válida para la generación de comprobantes");
$("#status").hide();
}else if (isStore == false) {
createCfdi($("[name=ShopName]").val(), result.shopInvoiceId, result.creditNoteId, result.version);
} else {
createCfdi(Shopify.shop, result.shopInvoiceId, result.creditNoteId, result.version);
}
} else {
alert("Se guardo correctamente la información. La orden se encuentra pendiente de pago, en cuanto se vea reflejado el pago se generará la Factura.");
$("#status").hide();
}
} else if (result.success == true && result.shopInvoiceId > 0 && result.created == false && result.createdByLimit == false) {
alert("Se guardo correctamente la información, pero ya se terminó el tiempo para generar la factura, ponte en contacto con el Vendedor.");
$("#status").hide();
}else if (result.success == true && result.shopInvoiceId > 0 && result.created == true) {
alert("Se guardaron los datos de Facturación, pero ya existe una factura para esta compra, contacta al vendedor en caso de que necesites se te refacture.");
$("#status").hide();
} else {
if (result.success == false && result.errors != null) {//&& obj.partialCertif != ""
for (var i = 0; i < result.errors.length; i++) {
console.log(result.errors[i]);
$("#errors").append(result.errors[i]).append("
");
}
}
alert("Fallo al guardar la información.");
$("#status").hide();
}
},
error: function () {
alert("Ocurrio un error al procesar la peticion.");
$("#status").hide();
},
});
}
function createCfdi(shop, id, idCreditNote, version) {
$ = jQuery191;
var host = getHost();
var route = '/Shopify/Invoice' + version + '/CreateCfdiStoreFront';
$("#status").show();
$.ajax({
type: 'GET',
dataType: 'jsonp',
async:false,
url: host + route,
data: { ShopName: shop, idShopifyInvoice: (idCreditNote > 0 ? idCreditNote : id) },
success: function (obj) {
if (obj.existInvoice == true) {
if (idCreditNote != null)
createCfdi(shop, id,null);
alert("Ya se ha generado la factura, consultala en el correo proporcionado.");
}
if (obj.success == true && obj.send == true)
alert("Se creó correctamente la Factura y se envió al correo proporcionado.");
else if (obj.success == true && obj.send == false)
alert("Se creó correctamente la Factura.");
else
alert(obj.message);
$("#status").hide();
},
error: function () {
alert("Ocurrio un error al procesar la peticion.");
$("#status").hide();
},
});
}
function getDataClient() {
$ = jQuery191;
var clie = new Object();
var addressClie = new Object();
var id = $("#IdClient").val();
var name = $("#Name").val();
var rfc = $("#Rfc").val();
var email = $("#Email").val();
var street = $("#Street").val();
var numExt = $("#ExteriorNumber").val();
var numInt = $("#InteriorNumber").val();
var neigh = $("#Neighborhood").val();
var zip = $("#Zipcode").val();
var locality = $("#Locality").val();
var municipality = $("#Municipality").val();
var state = $("#cmbState").val();
var payment = $("#cmbPaymentMethodSho").val();
var useCfdi = $('#cfdiUse').val();
var iva = $('#useIva') != undefined ? $('#useIva').val() : null;
var useIeps = $('#cmbBreakDownIeps').val();
var paymenthForm = $('#cmbPaymentForm').val();
var fiscalregime = $('#cmbFiscalRegimes').val();
addressClie.Street = street != "" ? street : null;
addressClie.ExteriorNumber = numExt != "" ? numExt : null;
addressClie.InteriorNumber = numInt;
addressClie.Neighborhood = neigh != "" ? neigh : null;
addressClie.ZipCode = zip;
addressClie.Locality = locality;
addressClie.Municipality = municipality != "" ? municipality : null;
addressClie.State = state != "" ? state : null;
addressClie.Country = rfc == "XEXX010101000" ? null : "Mexico";
clie.Id = id;
clie.Rfc = rfc;
clie.Name = name;
clie.Email = email;
clie.Address = addressClie;
clie.PaymentMethod = payment;
clie.CfdiUse = useCfdi;
clie.IvaPercentage = iva;
clie.ShowIeps = useIeps == undefined ? null : useIeps;
clie.IvaPercentage = iva;
clie.PaymentForm = paymenthForm;
clie.FiscalRegime = fiscalregime;
return clie;
}
function getCheckOutElements(isStore) {
var model = new Object();
var address = new Object();
if (isStore == false) {
model.Shop = $("[name=ShopName]").val();
model.order_id = $("[name=OrderId]").val();
}
else if (Shopify != null && Shopify.checkout != null) {
model.BillingAddress = address;
model.CreatedAt = Shopify.checkout.created_at;
model.Currency = Shopify.checkout.currency;
if (Shopify.checkout.source_name != "pos") {
model.customer_id = Shopify.checkout.customer_id != null ? Shopify.checkout.customer_id.toString() : "";
model.Email = Shopify.checkout.email;
}
model.order_id = Shopify.checkout.order_id.toString();
model.Token = Shopify.checkout.token;
model.Shop = Shopify.shop;
}
return model;
}
function getAddressElements() {
var address = new Object();
if (Shopify != null && Shopify.checkout != null && Shopify.checkout.billing_address != null) {
address.Address1 = Shopify.checkout.billing_address.address1;
//address.Address2 = Shopify.checkout.billing_address.address2;
address.City = Shopify.checkout.billing_address.city;
address.Company = Shopify.checkout.billing_address.company;
address.Country = Shopify.checkout.billing_address.country;
address.CountryCode = Shopify.checkout.billing_address.country_code;
address.FirstName = Shopify.checkout.billing_address.first_name;
address.LastName = Shopify.checkout.billing_address.last_name;
address.Phone = Shopify.checkout.billing_address.phone;
address.Province = Shopify.checkout.billing_address.province;
address.ProvinceCode = Shopify.checkout.billing_address.province_code;
address.Zip = Shopify.checkout.billing_address.zip;
}
return address;
}
function loadDataByRfc(e) {
loadCfdiUses(e);
if ($("#cmbFiscalRegimes").is(":visible")){
getRegimes(e);
}
}
function loadCfdiUses(e) {
$ = jQuery191;
var keyword = e.value;
var dropDown = $("#cfdiUse");
var allOptions = dropDown.find('option');
if (keyword.length <= 12) {//es persona moral
allOptions.each(function () {
var elem = $(this);
var value = elem.val();
if (value.indexOf("D") == 0) {
elem.hide();
} else {
elem.show();
}
});
} else {
allOptions.each(function () {
var elem = $(this);
elem.show();
});
}
//getRegimes(e);
}
function getRegimes(e, fiscalRegime) {
$ = jQuery191;
var keyword = e.value;
var dropDown = $("#cmbFiscalRegimes");
var allOptions = dropDown.find('option');
if (keyword.length <= 12) {//es persona moral
allOptions.each(function () {
var elem = $(this);
var ismoral = elem.data('moral');
if (ismoral == undefined || ismoral == 1) {
elem.show();
} else {
elem.hide();
}
});
} else {
allOptions.each(function () {
var elem = $(this);
var ismoral = elem.data('moral');
if (ismoral == undefined || ismoral == 0) {
elem.show();
} else {
elem.hide();
}
});
}
var fiscalRegime = $('[name="FiscalRegime"]').val();
$('#cmbFiscalRegimes').val(fiscalRegime);
}
//function fillCmbRegimes(e, catalogRegimes, selected) {
// //getCurrentBusinessLine();
// var component;
// if (e.name == undefined || !e.name.includes('ThirdPartyAccount.Rfc'))
// component = $('#cmbFiscalRegimes');
// else {
// var id = e.name.split('[')[1].split(']')[0];
// component = $('#cmbFiscalRegimes_' + id);
// }
// var keyword = $(e).val();
// var isNatural = false;
// component.empty().append($("").val("").text('Selecciona el Régimen fiscal'));
// if (keyword.length > 12) {
// isNatural = true;
// }
// $.each(catalogRegimes, function (idx, value) {
// natural = value.Natural;
// moral = value.Moral;
// //console.log(natural);
// if (isNatural) {
// if (natural === isNatural) {
// // console.log(value.Name);
// component.append($("").val(value.Value).text(value.Value + " - " + value.Name));
// }
// } else {
// if (moral != isNatural) {
// component.append($("").val(value.Value).text(value.Value + " - " + value.Name));
// }
// }
// });
// if (selected != null || selected != undefined)
// $('#cmbFiscalRegimes').val(selected);
//}
//>>> Validaciones =============================================================
// Valida los datos ingresados a un cliente
function ValidateClient() {
var error;
error = ValidateRequiered("Name", "Razon Social");
//if (error != "") return error;
valor = document.getElementById("Rfc").value;
if (valor.length < 12)
error += "*El RFC debe de contener la Homoclave, " +
"por lo tanto deben de ser de 12 a 13 caracteres.";
if (!ValidateRfc(valor)) // RFC
error += "* El RFC no tiene el formato correcto" +
"Ejemplo: XAXX010101000 ";
error += ValidateRequiered("Rfc", "RFC");
//if (error != "") return error;
valor = document.getElementById("Email").value;
if (!ValidateEmail(valor)) // RFC
error += "* El correo no tiene el formato correcto";
error += ValidateRequiered("Email", "Correo Electronico");
if ($("#version").val() == "4.0") {
error += ValidateRequiered("Zipcode", "Codigo Postal");
error += ValidateRequiered("cmbFiscalRegimes", "Regimen Fiscal");
}
//if (error != "") return error;
//error += ValidateRequiered("Street", "Calle");
////if (error != "") return error;
//error += ValidateRequiered("ExteriorNumber", "Numero Exterior");
////if (error != "") return error;
//error += ValidateRequiered("Neighborhood", "Colonia");
////if (error != "") return error;
//if (error != "") return error;
//error += ValidateRequiered("Municipality", "Municipio");
//if (error != "") return error;
error += ValidateRequiered("cfdiUse", "Uso de la factura");
error += ValidateRequiered("cmbPaymentMethodSho", "Método de pago");
if (error != "") return error;
//var valor = document.getElementById("Zipcode").value;
//if (!/^\d{5}$/.test(valor)) return "El código Postal solo puede tener 5 digitos";
//var indice = document.getElementById("cmbState").value; // Estado
//if (indice == 0)
// return "Debe seleccionar un estado.";
//var countryId = document.getElementById("cmbTaxCountry").selectedIndex;
//if (countryId == 1) { //Solo si es Mexico
// if (indice == null || indice == 0) {
// return "Seleccione un estado del combo";
// }
//}
return "";
}
function ValidateRequiered(idElement, name, montant) {
var cosa = document.getElementById(idElement);
if (cosa == null)
return "";
var valor = cosa.value;
if (valor == null || valor.length == 0 || /^\s+$/.test(valor))
return "* El campo " + name + " es obligatorio. ";
else {
if (montant != null && valor.length > montant)
return "* El campo " + name + " Solo puede contener " + montant + " simbolos ";
}
return "";
}
// Valida que un RFC sea correcto (True = Correcto)
function ValidateRfc(rfcStr) {
var strCorrecta;
strCorrecta = rfcStr;
var valid = "[A-Z&Ñ]{3,4}[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[A-Z0-9]{2}[0-9A]";
var validRfc = new RegExp(valid);
var matchArray = strCorrecta.match(validRfc);
if (matchArray == null)
return false;
else
return true;
}
function ValidateEmail(emailSrc) {
var expr = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!expr.test(emailSrc))
return false;
else
return true;
}
//<<< Validaciones =============================================================